package com.jms.demo.springbootactiveMq.config;

import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTempTopic;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.jms.Queue;
import javax.jms.Topic;

@Configuration
public class ActiveMQConfig {
    @Value("${queueName}")
    private String queueName;


    @Value("${topicName}")
    private String topicName;

    //定义存放消息的队列

    /**
     * 点对点：Queue，不可重复消费
     * 消息生产者生产消息发送到queue中，然后消息消费者从queue中取出并且消费消息。
     * 消息被消费以后，queue中不再有存储，所以消息消费者不可能消费到已经被消费的消息。
     * Queue支持存在多个消费者，但是对一个消息而言，只会有一个消费者可以消费、其它的则不能消费此消息了。
     * 当消费者不存在时，消息会一直保存，直到有消费消费
     * @return
     */
    @Bean
    public Queue queue(){
        return new ActiveMQQueue(queueName);
    }

    /**
     * 发布/订阅：Topic，可以重复消费
     * 消息生产者（发布）将消息发布到topic中，同时有多个消息消费者（订阅）消费该消息。
     * 和点对点方式不同，发布到topic的消息会被所有订阅者消费。
     * 当生产者发布消息，不管是否有消费者。都不会保存消息
     * @return
     */
    @Bean
    public Topic topic(){
        return new ActiveMQTempTopic(topicName);
    }
}
